import http from './http'
import { setUserInfo } from './auth'


/**
 * 微信授权登录
 */
export const handleAuthGetUserInfo = async (e) => {

    // 获取用户信息
    let { encryptedData, rawData, signature, iv } = e.detail

    // 获取小程序登录成功后的code
    const { code } = await handleWxLogin()

    // 获取当前小程序的账号信息
    const appid = getApp().globalData.APPID

    // 组装获取用户信息数据
    let params = { appid, encryptedData, rawData, signature, iv, code }

    // 发送请求获取授权登录的用户信息
    const res = await http.post(`/api/wx/mp/getUserInfo`, params)

    if (res.status) {
        const userInfo = res.data;
        console.log('==>微信授权登录[成功]', userInfo);
        // 将用户信息保存到缓存中
        setUserInfo(userInfo)

        // 将用户信息保存到全局属性
        getApp().globalData.userInfo = userInfo;

        return userInfo
    } else {
        console.log('==>微信授权登录[失败]', res.msg);
        return null
    }
}

/**
 * 微信授权获取openid，绑定到会员上
 */
export const handleOpenIdBindingToMobile = async (e) => {
    // 会员手机号
    const mobile = getApp().globalData.userInfo.mobile

    // 获取用户信息
    let { encryptedData, rawData, signature, iv } = e.detail

    // 获取小程序登录成功后的code
    const { code } = await handleWxLogin()

    // 获取当前小程序的账号信息
    const appid = getApp().globalData.APPID

    // 组装获取用户信息数据
    let params = { appid, encryptedData, rawData, signature, iv, code, mobile }

    // 发送请求获取授权登录的用户信息
    const res = await http.post(`/api/wx/mp/bindOpenIdToMobile`, params)

    if (res.status) {
        const userInfo = res.data;
        console.log('==>微信授权登录[成功]', userInfo);
        
        // 将用户信息保存到缓存中
        setUserInfo(userInfo)

        // 将用户信息保存到全局属性
        getApp().globalData.userInfo = userInfo;

        return userInfo
    } else {
        console.log('==>微信授权登录[失败]', res.msg);
        wx.showToast({title: '绑定失败，请重试', icon: "none"})
        return null
    }
}

/**
 * 获取手机号
 */
export const handleGetUserPhomeNumber = async (e) => {
    // 获取当前小程序的账号信息
    const appid = getApp().globalData.APPID

    // 获取用户信息
    let { encryptedData, iv } = e.detail

    // 获取小程序登录成功后的code
    const { code } = await handleWxLogin()

    // 组装参数
    let params = { appid, encryptedData, iv, code }

    // 发送请求获取授权登录的用户信息
    const res = await http.post(`/api/wx/mp/getPhoneNumber`, params)
    if (res.status) {
        console.log('==>微信授权获取手机号[成功]', res.data);

        const { phoneNumber } = res.data

        return phoneNumber
    } else {
        console.log('==>微信授权获取手机号[失败]', res.msg);
    }
}

/**
 * Promise 形式的 wxLogin
 */
export const handleWxLogin = () => {
    return new Promise((resolve, reject) => {
        wx.login({
            timeout: 10000,
            success: (result) => {
                resolve(result)
            },
            fail: (err) => {
                reject(err)
            }
        });
    })
}


/**
 * 小程序支付
 */
export const requestPayment = (data) => {
    return new Promise((resolve, reject) => {
        wx.requestPayment({
            timeStamp: data.timeStamp,
            nonceStr: data.nonceStr,
            package: data.packageValue,
            signType: 'MD5',
            paySign: data.paySign,
            success: (result) => {
                resolve(result)
            },
            fail: (err) => {
                reject(err)
            }
        });
    })
}

